home *** CD-ROM | disk | FTP | other *** search
/ Java Programmer's Toolkit / Java Programmer's Toolkit.iso / include / threads.h < prev    next >
C/C++ Source or Header  |  1996-01-12  |  5KB  |  132 lines

  1. /*
  2.  * @(#)threads.h    1.28 95/11/29  
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. #ifndef _THREADS_H_
  21. #define _THREADS_H_
  22.  
  23. #include "oobj.h"
  24. #include "interpreter.h"
  25. #include "timeval.h"
  26. #include "monitor.h"
  27. #include "bool.h"
  28. #include "sys_api.h"
  29.  
  30. #include "java_lang_Thread.h"
  31. #include "java_lang_ThreadGroup.h"
  32.  
  33. #define MinimumPriority        java_lang_Thread_MIN_PRIORITY
  34. #define MaximumPriority        java_lang_Thread_MAX_PRIORITY
  35. #define NormalPriority        java_lang_Thread_NORM_PRIORITY
  36.  
  37. /*
  38.  * Support for thread queue
  39.  */
  40.  
  41. extern sys_mon_t *_queue_lock;
  42.  
  43. #define QUEUE_LOCK_INIT() monitorRegister(_queue_lock, "Thread queue lock")
  44. #define QUEUE_LOCK()      sysMonitorEnter(_queue_lock)
  45. #define QUEUE_LOCKED()      sysMonitorEntered(_queue_lock)
  46. #define QUEUE_UNLOCK()      sysMonitorExit(_queue_lock)
  47. #define QUEUE_NOTIFY()      sysMonitorNotify(_queue_lock)
  48. #define QUEUE_WAIT()      sysMonitorWait(_queue_lock, SYS_TIMEOUT_INFINITY)
  49.  
  50. /*
  51.  * Thread-related data structures
  52.  */
  53.  
  54. typedef struct Hjava_lang_Thread HThread;
  55. typedef struct Hjava_lang_ThreadGroup HThreadGroup;
  56. typedef struct Hjava_lang_Thread *TID;
  57.  
  58. typedef sys_thread_t ThreadPrivate;
  59.  
  60. /* Access to thread data structures */
  61. #define THREAD(tid)    ((struct Classjava_lang_Thread *) unhand(tid))
  62. #define SYSTHREAD(tid)    ((sys_thread_t *)THREAD(tid)->PrivateInfo)
  63.  
  64. #define THR_SYSTEM 0        /* System thread */
  65. #define THR_USER   1        /* User thread */
  66.  
  67. extern int ActiveThreadCount;        /* All threads */
  68. extern int UserThreadCount;        /* User threads */
  69.  
  70. /* The default Java stack size is legitimately platform-independent */
  71. #define JAVASTACKSIZE (400 * 1024)     /* Default size of a thread java stack */
  72.  
  73. extern long ProcStackSize;        /* Actual size of thread C stack */
  74. extern long JavaStackSize;        /* Actual maximum size of java stack */
  75.  
  76. extern stackp_t mainstktop;        /* Base of primordial thread stack */
  77.  
  78. /*
  79.  * External interface to threads support
  80.  */
  81.  
  82. void threadBootstrap(TID tid, stackp_t sb);
  83. int  threadCreate(TID, unsigned int, size_t, void *(*)());
  84. TID  threadSelf(void);
  85. void threadSleep(int);
  86. int  threadEnumerate(TID*, int);
  87.  
  88. void threadDumpInfo(TID, bool_t);        /* Debugging help in debug.c */
  89.  
  90. int threadPostException(TID tid, void *exc);
  91.  
  92. /*
  93.  * There may be certain initialization that can't be done except by the
  94.  * thread on itself, e.g. setting thread-local data in Solaris threads.
  95.  * This function is called from ThreadRT0() when the thread starts up
  96.  * to take care of such things.
  97.  */
  98. #define threadInit(tid, sb)        sysThreadInit(SYSTHREAD(tid), sb)
  99.  
  100. /*
  101.  * Exit the current thread.  This function is not expected to return.
  102.  */
  103. #define threadExit()            sysThreadExit()
  104.  
  105. /*
  106.  * Note that we do not check that priorities are within Java's limits down here.
  107.  * In fact, we make use of that for things like the idle and clock threads.
  108.  * This may change once we work out a portable priority model.
  109.  */
  110. #define threadSetPriority(tid, pri)    sysThreadSetPriority(SYSTHREAD(tid), pri)
  111. #define threadGetPriority(tid, prip)    sysThreadGetPriority(SYSTHREAD(tid), prip)
  112.  
  113. #define threadYield()            sysThreadYield()
  114. #define threadResume(tid)        sysThreadResume(SYSTHREAD(tid))
  115. #define threadSuspend(tid)        sysThreadSuspend(SYSTHREAD(tid))
  116.  
  117. /*
  118.  * Return information about this thread's stack.  This is used by
  119.  * Garbage Collection code that needs to inspect the stack.
  120.  *
  121.  * It is permissable to return a null stack_base for those threads
  122.  * that don't have a known stack (e.g. not allocated by the threads
  123.  * package).  It is also permissable to return a somewhat bogus
  124.  * stack_pointer for the current thread.
  125.  */
  126. #define threadStackBase(tid)        sysThreadStackBase(SYSTHREAD(tid))
  127. #define threadStackPointer(tid)        sysThreadStackPointer(SYSTHREAD(tid))
  128.  
  129. #define threadCheckStack()        sysThreadCheckStack()
  130.  
  131. #endif /* !_THREADS_H_ */
  132.